/*

https://flutter.cn/docs/get-started/flutter-for/android-devs

Activity 和 Fragment
Activity 和 Fragment 在 Flutter 中的对应概念是什么？
在 Android 中，一个 Activity 代表用户可以完成的一件独立任务。一个 Fragment 代表一个行为或者用户界面的一部分。 Fragment 用于模块化你的代码，为大屏组合复杂的用户界面，并适配应用的界面。在 Flutter 中，这两个概念都对应于 Widget。

如果要学习更多的关于 Activity 和 Fragment 创建界面的内容，请阅读社区贡献的 Medium 文章， 给 Android 开发者的 Flutter 指南：如何在 Flutter 中设计一个 Activity 界面。

就如在 Intents 部分所提到的，Flutter 中的界面都是以 Widget 表示的，因为 Flutter 中一切皆为 Widget。你使用 Navigator 在表示不同屏幕或页面，或者仅仅是相同数据的不同状态和渲染的各个 Route 之间进行导航。

如何监听 Android Activity 的生命周期事件？
在 Android 中，你可以覆写 Activity 的生命周期方法来监听其生命周期，也可以在 Application 上注册 ActivityLifecycleCallbacks。在 Flutter 中，这两种方法都没有，但是你可以通过绑定 WidgetsBinding 观察者并监听 didChangeAppLifecycleState() 的变化事件来监听生命周期。

可以被观察的生命周期事件有：

inactive — 应用处于非活跃状态并且不接收用户输入。

detached — 应用依然保留 flutter engine，但是全部宿主 view 均已脱离。

paused — 应用当前对用户不可见，无法响应用户输入，并运行在后台。这个事件对应于 Android 中的 onPause()；

resumed — 应用对用户可见并且可以响应用户的输入。这个事件对应于 Android 中的 onPostResume()；

suspending — 应用暂时被挂起。这个事件对应于 Android 中的 onStop； iOS 上由于没有对应的事件，因此不会触发此事件。

想要了解这些状态含义的更多细节，请查看 AppLifecycleStatus 文档。

你可能已经注意到，只有一小部分的 Activity 生命周期事件是可用的，虽然 FlutterActivity 在内部捕获了几乎所有的 Activity 生命周期事件并将它们发送给 Flutter 引擎，但是它们大部分都向你屏蔽了。 Flutter 为你管理引擎的启动和停止，在大部分情况下几乎没有理由要在 Flutter 一端监听 Activity 的生命周期。如果你需要通过监听生命周期来获取或释放原生的资源，无论如何都应该在原生端做这件事。

下面的例子展示了如何监听容器 Activity 的生命周期状态：


 */


import 'package:flutter/widgets.dart';

class LifecycleWatcher extends StatefulWidget {
  const LifecycleWatcher({super.key});

  @override
  State<LifecycleWatcher> createState() => _LifecycleWatcherState();
}

class _LifecycleWatcherState extends State<LifecycleWatcher>
    with WidgetsBindingObserver {
  AppLifecycleState? _lastLifecycleState;

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    setState(() {
      _lastLifecycleState = state;
    });
  }

  @override
  Widget build(BuildContext context) {
    if (_lastLifecycleState == null) {
      return const Text(
        'This widget has not observed any lifecycle changes.',
        textDirection: TextDirection.ltr,
      );
    }

    return Text(
      'The most recent lifecycle state this widget observed was: $_lastLifecycleState.',
      textDirection: TextDirection.ltr,
    );
  }
}

void main() {
  runApp(const Center(child: LifecycleWatcher()));
}